/************************************************************************
 * <br>
 * <ul>
 * <li>版权所有：唐山弘川科技有限公司 2009－2020</li>
 * <li>创建日期：2009-8-10</li>
 * <li>初始作者：刘川</li>
 * </ul>
 * <ul>
 * <b>修订历史</b>
 * <li>1、</li>
 * </ul>
 ***********************************************************************/
package com.hy.enterprise.framework.persistence.domain.query ;

/**
 * <ul>
 * <li>设计作者：刘川</li>
 * <li>设计日期：2009-8-10</li>
 * <li>设计时间：下午03:26:56</li>
 * <li>设计目的：表现查询字句的抽象实现类</li>
 * </ul>
 * <ul>
 * <b>修订历史</b>
 * <li>1、</li>
 * </ul>
 */
public abstract class AbstractClause
{
	protected final AbstractClause	previousClause ;

	/**
	 * 构造函数
	 * 
	 * @param previousClause
	 */
	protected AbstractClause (
	                           AbstractClause previousClause )
	{
		super ( ) ;
		this.previousClause =
		                      previousClause ;
	}

	/**
	 * <ul>
	 * <li>设计作者：刘川</li>
	 * <li>设计日期：2009-8-10</li>
	 * <li>设计时间：下午03:28:30</li>
	 * <li>设计目的：获取字句字符串</li>
	 * </ul>
	 * <ul>
	 * <b>修订历史</b>
	 * <li>1、</li>
	 * </ul>
	 * 
	 * @param stringBuilder
	 * @return
	 */
	protected final StringBuilder toString (
	                                         StringBuilder stringBuilder )
	{
		if ( this.previousClause != null )
		{
			this.previousClause
			                   .toString ( stringBuilder ) ;
		}
		this
		    .addTo ( stringBuilder ) ;
		return stringBuilder ;
	}

	/**
	 * <ul>
	 * <li>设计作者：刘川</li>
	 * <li>设计日期：2009-8-10</li>
	 * <li>设计时间：下午03:27:52</li>
	 * <li>设计目的：加入子句</li>
	 * </ul>
	 * <ul>
	 * <b>修订历史</b>
	 * <li>1、</li>
	 * </ul>
	 * 
	 * @param stringBuilder
	 * @return
	 */
	abstract StringBuilder addTo (
	                               StringBuilder stringBuilder ) ;

	/**
	 * @see java.lang.Object#toString()
	 */
	@ Override
	public final String toString ( )
	{
		return this
		           .toString (
		                       new StringBuilder ( ) )
		           .toString ( ) ;
	}
}
